<?php
/**
 * 封装性  魔术方法
 * __get()
 * __set()
 *
 * __isset()
 * __unset()
 *
 * __construct() 类开始调用时第一个调用的方法
 *
 * __destruct() 最后一个调用的方法
 *
 * __set() 为私有属性自动赋值的时候调用的方法
 *
 * __get() 获取私有属性的时候调用的方法
 *
 * __isset() 判断私有属性是否存在时调用的方法
 *
 * __unset() 删除私有属性的时候调用的方法
 *
 * 1、自动调用，但不同的魔术方法，有自己调用的条件
 * 2、都是以‘__’开始的方法
 * 3、所有的魔术方法，方法名都是固定的
 * 
 */


	/**
	* 创建一个人类
	*/
	class Person {
		private $name;
		private $age;
		private $sex;
		private $height;
		private $width;

		function __construct($name="张三", $age=20, $sex="男", $height=100, $width=100)
		{
			# code...
			$this->name = $name;
			$this->age = $age;
			$this->sex = $sex;
			$this->height = $height;
			$this->width  = $width;

		}

		function __get($pro) {
			return $this->$pro;
		}

		function __set($name, $value) {
			$this->$name = $value;
		}

		function setSex($sex){
			if (!($sex=="男" or $sex=="女")) {
				return 1;
			}
			else
				$this->sex = $sex;
		}

		function __destruct(){
			echo "再见".$this->name."<br>";
		}
	}

	$P1 = new Person("Tom", 20, "男");
	echo $P1->name."<br>";
	echo $P1->sex."<br>";
	echo $P1->age;



 ?>
